#※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※
# File Name: stack.sh
# Author: GID5564
# Description:
# Created Time: 05/07/24-16:46:42
#※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※
#! /usr/bin/env bash

# 避免重复导入
#[[ -n $__XLIB_IMPORTED__STACK ]] && return 0
#__XLIB_IMPORTED__STACK=1


function __stack_init__(){
    export __STACK
    export __TMP_STACK
}

########################################
# 描述: 临时入栈
# 参数: $1:要添加到临时堆栈上的项
# 返回: 
# 实例: __stack_push_tmp <item>
########################################
__stack_push_tmp() {
    local TMP="$1"

    if has_value __TMP_STACK; then
        __TMP_STACK="${__TMP_STACK}"$'\n'"${TMP}"
    else
        __TMP_STACK="$TMP"
    fi
}


########################################
# 描述: 入栈
# 参数: $1:要添加到堆栈上的项
# 返回: 
# 实例: stack_push <item>
########################################
stack_push() {
    line="$1"

    if has_value __STACK; then
        __STACK="${line}"$'\n'"${__STACK}"
    else
        __STACK="$line"
    fi
}

## @fn stack_pop()
## @ingroup stack##@FN堆栈_弹出（）。##@组内堆栈##@Brief移除堆栈中最高的项并将其放入##在“ register ”变量中。##如果成功，则@retval 0。其他情况下为##@retval 1。
########################################
# 描述: 出栈，并将其放入变量REGISTER中
# 参数: 
# 返回: 
# 实例: stack_pop 
########################################
stack_pop() {
    __TMP_STACK=""
    i=0
    tmp=""
    for x in $__STACK; do
        if [ "$i" == "0" ]; then
            tmp="$x"
        else
            __stack_push_tmp "$x"
        fi
        ((i++))
    done
    __STACK="$__TMP_STACK"
    REGISTER="$tmp"
    if [ -z "$REGISTER" ]; then
        return 1
    else
        return 0
    fi
}























__stack_init__






















